# kinds                                                               -*- sh -*-
#
# For documentation on this file format, please refer to
# src/theory/builtin/kinds.
#

theory THEORY_BOOL ::cvc5::internal::theory::booleans::TheoryBool "theory/booleans/theory_bool.h"
typechecker "theory/booleans/theory_bool_type_rules.h"

properties finite

rewriter ::cvc5::internal::theory::booleans::TheoryBoolRewriter "theory/booleans/theory_bool_rewriter.h"

sort BOOLEAN_TYPE \
    2 \
    well-founded \
        "NodeManager::currentNM()->mkConst(false)" \
        "expr/node_manager.h" \
    "Boolean type"

constant CONST_BOOLEAN \
    skip \
    bool \
    ::cvc5::internal::BoolHashFunction \
    "util/bool.h" \
    "truth and falsity; payload is a (C++) bool"

enumerator BOOLEAN_TYPE \
    "::cvc5::internal::theory::booleans::BooleanEnumerator" \
    "theory/booleans/type_enumerator.h"

operator NOT 1 "logical not"
operator AND 2: "logical and (N-ary)"
operator IMPLIES 2 "logical implication (exactly two parameters)"
operator OR 2: "logical or (N-ary)"
operator XOR 2 "exclusive or (exactly two parameters)"
operator ITE 3 "if-then-else, used for both Boolean and term ITE constructs; first parameter is (Boolean-sorted) condition, second is 'then', third is 'else' and these two parameters must have same base sort"

typerule CONST_BOOLEAN ::cvc5::internal::theory::boolean::BooleanTypeRule

typerule NOT ::cvc5::internal::theory::boolean::BooleanTypeRule
typerule AND ::cvc5::internal::theory::boolean::BooleanTypeRule
typerule IMPLIES ::cvc5::internal::theory::boolean::BooleanTypeRule
typerule OR ::cvc5::internal::theory::boolean::BooleanTypeRule
typerule XOR ::cvc5::internal::theory::boolean::BooleanTypeRule
typerule ITE ::cvc5::internal::theory::boolean::IteTypeRule

endtheory
